<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script>
      /* var a = 1
        function fun1(){
            a = 2 //因为函数内没有声明,所以去找了上一层的全局变量给予赋值
            console.log("a="+a)
        }
        fun1() //运行后a=2
        console.log("a="+a);
        //结果为a=2 a=2 */

      /* var a = 1;
      function fun1() {
        //var a =2 会直接提升到函数作用域的最开头,因为有提升.
        console.log(a); //所以找到了a这个变量,但是因为是var 的提升,只有变量没有赋值
        // 输出Undefined
        var a = 2;
        console.log(a); //2
      }

      fun1();
      
      console.log(a); //1 */

      /*       var a = 1;
      //   定义形参其实就想当于在函数中声明了对应的变量,但是没有赋值
      function fun1(a) {
        console.log(a); //Undefined
        a = 2;
        console.log(a); //2
      }
      fun1(); // 局部变量不会影响全局变量
      console.log(a); //2
 */
      /*       var a = 1
        function fun1(a){
            console.log(a);
            a = 2 
            console.log("a="+a)
        }  
        fun1(10) 
        console.log("a="+a);
        //输出10 2 1

 */
     /*  var a = 1;
      function fun1(a) {
        console.log(a); //局部变量a为1
        a = 2;
        console.log('a=' + a); //2
      }
      fun1(a); //寻找全局变量a,输入值1
      console.log('a=' + a); //1
       */
       
       //首先var和function都会提升,几个var的提升,只看第一个,因为提升了以后都是声明.后面重复的就等于没用了只有赋值的效果
       //然后看提升的var和function,值会输出function,因为function有赋值的效果,所以会输出
       console.log(a);//(){alert(2)}
       
       var a = 1

       console.log(a);//1

       function a(){
        alert(2)
       }
                //因为已经被提升了,所以直接可以忽略了   所以调用的还是a=1
       console.log(a);//1
       //var可以直接全部忽略,都没用了
       var a = 3 //赋值a=3
       
       console.log(a);//3

       var a =function(){
        alert(4)
       }

       console.log(a);//(){alert(4)}

       var a //等于是啥没做
       
       console.log(a);//(){alert(4)}

    </script>
  </head>
  <body></body>
</html>
